home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1994 / MacHack 1994.toast / MacHack™ 1987-1994 / MacHack™ '92 / Hacks ’92 / WhereAmI / TestCityList.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-17  |  2.1 KB  |  99 lines  |  [TEXT/MPS ]

  1. #include <Values.h>
  2. #include <Types.h>
  3. #include <Resources.h>
  4. #include <Memory.h>
  5. #include <Traps.h>
  6. #include <FixMath.h>
  7. #include <stdio.h>
  8. #include <Appletalk.h>
  9.  
  10. typedef struct CityResourceFormat {
  11.     short            fRecordSize;
  12.     long            fLatitude, fLongitude;
  13.     long            fGMTOffset;
  14.     long            fUnknown1;
  15.     Str255            fCityName;
  16.     long            fUnknown2;
  17.     
  18. } CityResourceFormat, *CityResourceFormatPtr;
  19.  
  20. #define    kCityResourceType    'CTY#'
  21. #define    kCityResourceID        -4064
  22.  
  23. typedef struct CityRecord {
  24.     Str63            fCityName;
  25.     extended        fLatitude, fLongitude;
  26.     long            fGMTOffset;
  27.     
  28.     struct CityRecord*    fNext;
  29. } CityRecord, *CityRecordPtr;
  30.  
  31.  
  32.  
  33. CityRecordPtr                gCitiesRecordList = nil;
  34.  
  35. Boolean InitializeCitiesList() {
  36.     Handle    cityDataH = GetResource ('CTY#', -4064);
  37.     CityRecordPtr        cityP = nil, lastCity = nil;
  38.     Ptr                    r;
  39.     int                    index, count;
  40.  
  41.     DebugStr ("\p • InitializeCitiesList, entering.");
  42.     if (!cityDataH)
  43.         return false;
  44.  
  45.     HLock(cityDataH);
  46.     count = * (short *) *cityDataH;
  47.     r = *cityDataH + sizeof(short);
  48.     
  49.     for (index = 1; index <= count; ++index) {
  50.         CityRecordPtr cityP = (CityRecordPtr) NewPtrClear(sizeof(*cityP));
  51.  
  52.         if (cityP) {
  53.             CityResourceFormatPtr resP = (CityResourceFormatPtr) r;
  54.             
  55.             BlockMove((Ptr) resP->fCityName, (Ptr) cityP->fCityName, resP->fCityName[0]+1);
  56.             cityP->fLongitude = Frac2X(resP->fLongitude);    
  57.             cityP->fLatitude = Frac2X(resP->fLatitude);    
  58.             cityP->fGMTOffset = resP->fGMTOffset;
  59.             cityP->fNext = nil;
  60.             
  61.             r += resP->fRecordSize;
  62.  
  63.             if (lastCity) {
  64.                 lastCity->fNext = cityP;
  65.             } else {
  66.                 gCitiesRecordList = cityP;
  67.             };
  68.             lastCity = cityP;
  69.         } else {
  70.             break;
  71.         };
  72.     };
  73.     
  74.     ReleaseResource (cityDataH);
  75.  
  76.     return true;
  77. };
  78.  
  79.  
  80. main() {
  81.     CityRecordPtr cityP;
  82.     
  83.     InitializeCitiesList();
  84.     
  85.     cityP = gCitiesRecordList;
  86.     
  87.     while (cityP) {
  88.         long yOffset = (int) (((cityP->fLatitude)) * 200) + 200;
  89.         long xOffset = (int) (((cityP->fLongitude + 2) * 400 ) / 4.0) + 400;
  90.         
  91.         printf ("%P (%lf, %lf, +%d) [%d, %d]\n", cityP->fCityName, cityP->fLatitude, 
  92.                                 cityP->fLongitude, cityP->fGMTOffset / 3600,
  93.                                 yOffset, xOffset);
  94.                                 
  95.                 
  96.         cityP = cityP->fNext;
  97.     };
  98. };
  99.